/* 
   对象传参
   options
       url:请求的地址
       data:携带的数据(参数数据队列 a=1&b=2&c=3)
       async:是否异步(默认true)
       dataType: 接口返回的数据类型 (方法默认text, 其他类型需要用户指定)
       success:  请求成功时执行的回调函数  => 函数有一个形参,用于接收请求的数据

   */
export function ajax(options) { // 传入一个配置对象 => {url:xxx, data:xxx, async:xxxx,dataType:xxxx,success:xxx}

    var { type = "get", url, data, async = true, dataType = "text", success } = options;

    var xhr = new XMLHttpRequest();

    if (Object.prototype.toString.call(data) == "[object Object]") {
        var list = [];
        for (var key in data) {
            var val = data[key];
            var subStr = key + "=" + val;
            list.push(subStr);
        }
        data = list.join("&");
    }
    // console.log(data);

    if (type.toLowerCase() == "get") { // "GET"
        xhr.open("get", data ? url + "?" + data : url, async)
        xhr.send();
    } else if (type.toLowerCase() == "post") {
        xhr.open("post", url, async)
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.send(data);
    }


    xhr.onreadystatechange = function () {
        // debugger;
        if (xhr.readyState == 4 && xhr.status == 200) {
            var res = xhr.responseText;
            if (dataType == "json") {
                res = JSON.parse(res);
            }
            // console.log(res);  // js对象

            // 获取数据之后 -> 可能要执行的操作不一样
            // 搜索 => 拿到数据渲染
            // 注册 -> 跳转登录
            // 删除 -> 提示

            // 请求成功时执行的回调函数
            if (success && typeof success == "function") {
                success(res);  // 调用回调函数值,请求的数据作为实参
            }
        }
    }
}
